package com.fowo.api.common.meta;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.List;

/**
 * 表示 resources/meta-data 的 fields 元素，一个对象对应一个字段定义
 * @author yl_ls
 */
@Getter
@Setter
@Accessors(chain = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class MetaDataField implements Serializable {
    /**
     * 字段名
     */
    private String name;
    /**
     * 字段标题
     */
    private String label;
    /**
     * 系统类型
     */
    private String systemType;
    /**
     * 数据类型
     */
    private String dataType;
    /**
     * 列名
     */
    private String columnName;
    /**
     * 是否列表可见
     */
    private Boolean listVisible;
    /**
     * 是否表单可见
     */
    private Boolean formVisible;
    /**
     * 是否只读
     */
    private Boolean readOnly;
    /**
     * 关联类字段的显示字段名
     */
    private String displayFieldName;
    /**
     * 字段类型为文本时的最大长度
     */
    private Integer maxLength;
    /**
     * 多值
     */
    private Boolean multiple;
    /**
     * 可导入
     */
    private Boolean canImport;
    /**
     * 可导出
     */
    private Boolean canExport;
    /**
     * 是否必填
     */
    private Boolean required;
    /**
     * 此字段的模糊搜索是否使用左模糊
     */
    private Boolean fuzzySearchLeftLike;
    /**
     * 引用对象名
     */
    private String refObjectName;
    /**
     * 引用表名
     */
    private String refTableName;
    /**
     * 引用系统对象名
     */
    private String refSysObjectName;
    /**
     * 枚举选项
     */
    private List<MetaDataOption> options;
    /**
     * 字典代码
     */
    private String dictCode;
    /**
     * 关联返回（适用于 JOIN 字段）
     */
    private List<MetaDataJoinReturnMap> joinReturnMaps;
    /**
     * 关联字段是否包括关联标题的本地存储
     */
    private Boolean saveReferenceTitle;

    /**
     * 自定义父子关联字段（适用于 CHILD 类型字段）
     */
    private List<ReferenceCustomField> referenceCustomFields;
    

}
